<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
      <title>Class DemoUseMachiningProject | HiAPI-C# 2025 </title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="title" content="Class DemoUseMachiningProject | HiAPI-C# 2025 ">
      
      <meta name="description" content="Demonstrates how to load and use an existing  instance. This sample shows how to set up event handlers for messages and machining step objects, execute NC files, and properly manage project resources using .">
      <link rel="icon" href="../../img/HiAPI.favicon.ico">
      <link rel="stylesheet" href="../../public/docfx.min.css">
      <link rel="stylesheet" href="../../public/main.css">
      <meta name="docfx:navrel" content="../../toc.html">
      <meta name="docfx:tocrel" content="toc.html">
      
      <meta name="docfx:rel" content="../../">
      
      
      
      <meta name="loc:inThisArticle" content="In this article">
      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
      <meta name="loc:tocFilter" content="Filter by title">
      <meta name="loc:nextArticle" content="Next">
      <meta name="loc:prevArticle" content="Previous">
      <meta name="loc:themeLight" content="Light">
      <meta name="loc:themeDark" content="Dark">
      <meta name="loc:themeAuto" content="Auto">
      <meta name="loc:changeTheme" content="Change theme">
      <meta name="loc:copy" content="Copy">
      <meta name="loc:downloadPdf" content="Download PDF">

      <script type="module" src="./../../public/docfx.min.js"></script>

      <script>
        const theme = localStorage.getItem('theme') || 'auto'
        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
      </script>

  </head>

  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
    <header class="bg-body border-bottom">
      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
        <div class="container-xxl flex-nowrap">
          <a class="navbar-brand" href="../../index.html">
            <img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
            
          </a>
          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
            <i class="bi bi-three-dots"></i>
          </button>
          <div class="collapse navbar-collapse" id="navpanel">
            <div id="navbar">
              <form class="search" role="search" id="search">
                <i class="bi bi-search"></i>
                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
              </form>
            </div>
          </div>
        </div>
      </nav>
    </header>

    <main class="container-xxl">
      <div class="toc-offcanvas">
        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
          <div class="offcanvas-header">
            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
          </div>
          <div class="offcanvas-body">
            <nav class="toc" id="toc"></nav>
          </div>
        </div>
      </div>

      <div class="content">
        <div class="actionbar">
          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
            <i class="bi bi-list"></i>
          </button>

          <nav id="breadcrumb"></nav>
        </div>

        <article data-uid="Sample.Machining.DemoUseMachiningProject">



  <h1 id="Sample_Machining_DemoUseMachiningProject" data-uid="Sample.Machining.DemoUseMachiningProject" class="text-break">
Class DemoUseMachiningProject  
  </h1>

  <div class="facts text-secondary">
    <dl><dt>Namespace</dt><dd><a class="xref" href="Sample.html">Sample</a>.<a class="xref" href="Sample.Machining.html">Machining</a></dd></dl>
  <dl><dt>Assembly</dt><dd>Hi.Sample.dll</dd></dl>
  </div>

  <div class="markdown summary"><p>Demonstrates how to load and use an existing <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> instance.
This sample shows how to set up event handlers for messages and machining step objects,
execute NC files, and properly manage project resources using
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable.dispose">Dispose()</a>.</p>
</div>
  <div class="markdown conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static class DemoUseMachiningProject</code></pre>
  </div>




  <dl class="typelist inheritance">
    <dt>Inheritance</dt>
    <dd>
      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
      <div><span class="xref">DemoUseMachiningProject</span></div>
    </dd>
  </dl>



  <dl class="typelist inheritedMembers">
    <dt>Inherited Members</dt>
    <dd>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
    </div>
  </dd></dl>




  <h2 id="Sample_Machining_DemoUseMachiningProject_remarks">Remarks</h2>
  <div class="markdown level0 remarks"><h3 id="source-code">Source Code</h3>
<pre><code class="lang-csharp" name="SampleCode">using Hi.Common.FileLines;
using Hi.Common.Messages;
using Hi.HiNcKits;
using Hi.MachiningProcs;
using System;
using System.IO;

namespace Sample.Machining
{
    /// &lt;summary&gt;
    /// Demonstrates how to load and use an existing &lt;see cref=&quot;MachiningProject&quot;/&gt; instance.
    /// This sample shows how to set up event handlers for messages and machining step objects,
    /// execute NC files, and properly manage project resources using
    /// &lt;see cref=&quot;IDisposable.Dispose&quot;/&gt;.
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;
    /// ### Source Code
    /// [!code-csharp[SampleCode](~/../Hi.Sample/Machining/DemoUseMachiningProject.cs)]
    /// &lt;/remarks&gt;
    public static class DemoUseMachiningProject
    {
        static void Main()
        {
            LocalApp.AppBegin();

            #region ProjectLoading
            var projectPath = &quot;C:/HiNC-Projects/DemoStandardPath/Main.hincproj&quot;;
            Console.WriteLine($&quot;Load Project: {projectPath}&quot;);
            MachiningProject machiningProject = MachiningProject.LoadFile(projectPath);
            #endregion

            #region EventHandling
            Console.WriteLine($&quot;Set message event.&quot;);

            using StreamWriter writer = new StreamWriter(&quot;msg.txt&quot;);
            //show message if something abnormal.
            machiningProject.SessionMessageHost.CollectionItemAdded += pack =&gt;
            {
                if (pack.Tags.Contains(MessageFlag.Warning.ToString()) ||
                    pack.Tags.Contains(MessageFlag.Error.ToString()) ||
                    pack.Tags.Contains(MessageFlag.Exception.ToString()))
                {
                    var sourceCommand = pack.SourceCommand;
                    writer.WriteLine($&quot;{pack.Message} At \&quot;{sourceCommand?.FilePath}\&quot; (Line {sourceCommand?.GetLineNo()}) \&quot;{sourceCommand?.Line}\&quot;&quot;);
                }
            };
            Console.WriteLine($&quot;Set machining step event.&quot;);
            //show MRR.
            machiningProject.RuntimeApi.MachiningStepBuilt += (preStep, curStep) =&gt;
            {
                var sourceCommand = curStep.SourceCommand;
                if (curStep.Mrr_mm3ds &gt; 500) //show only the step that contains large MRR.
                    Console.WriteLine($&quot;MRR = {curStep.Mrr_mm3ds} At \&quot;{sourceCommand?.FilePath}\&quot; (Line {sourceCommand?.GetLineNo()}) \&quot;{sourceCommand?.Line}\&quot;&quot;);
            };
            #endregion

            #region MachiningExecution
            Console.WriteLine($&quot;Reset runtime status.&quot;);
            machiningProject.ResetRuntime();

            Console.WriteLine($&quot;Session begin.&quot;);
            machiningProject.BeginSession();
            machiningProject.RuntimeApi.MachiningResolution_mm = 1;
            machiningProject.RuntimeApi.EnableCollisionDetection = true;
            machiningProject.RuntimeApi.EnablePauseOnFailure = false;
            machiningProject.RuntimeApi.EnablePhysics = false;
            //the path from Shell-API is relative by project directory. 
            machiningProject.RuntimeApi.PlayNcFile(&quot;NC/side.ptp&quot;);
            machiningProject.RuntimeApi.PlayNcFile(&quot;NC/circle.ptp&quot;);
            machiningProject.EndSession();
            Console.WriteLine($&quot;Session end.&quot;);
            #endregion

            #region CleanupResources
            Console.WriteLine($&quot;Close Project: {projectPath}&quot;);
            machiningProject.Dispose();

            LocalApp.AppEnd();

            Console.WriteLine($&quot;Program end.&quot;);
            #endregion
        }
    }
}
</code></pre></div>



</article>

        <div class="contribution d-print-none">
        </div>


      </div>

      <div class="affix">
        <nav id="affix"></nav>
      </div>
    </main>

    <div class="container-xxl search-results" id="search-results"></div>

    <footer class="border-top text-secondary">
      <div class="container-xxl">
        <div class="flex-fill">
          <span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
        </div>
      </div>
    </footer>
  </body>
</html>
